package com.fysl.app;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;

import com.fysl.app.db.UserDao;
import com.fysl.app.domain.RobotUser;
import com.fysl.app.utils.PreferenceManager;
import com.hyphenate.easeui.domain.EaseUser;

public class DemoModel {
	UserDao dao = null;
	protected Context context = null;
	protected Map<Key, Object> valueCache = new HashMap<Key, Object>();

	public DemoModel(Context ctx) {
		context = ctx;
		PreferenceManager.init(context);
	}

	public boolean saveContactList(List<EaseUser> contactList) {
		UserDao dao = new UserDao(context);
		dao.saveContactList(contactList);
		return true;
	}

	public Map<String, EaseUser> getContactList() {
		UserDao dao = new UserDao(context);
		return dao.getContactList();
	}

	public void saveContact(EaseUser user) {
		UserDao dao = new UserDao(context);
		dao.saveContact(user);
	}

	/**
	 * 设置当前用户的环信id
	 * 
	 * @param username
	 */
	public void setCurrentUserName(String username) {
		PreferenceManager.getInstance().setCurrentUserName(username);
	}

	/**
	 * 获取当前用户的环信id
	 */
	public String getCurrentUsernName() {
		return PreferenceManager.getInstance().getCurrentUsername();
	}

	public Map<String, RobotUser> getRobotList() {
		UserDao dao = new UserDao(context);
		return dao.getRobotUser();
	}

	public boolean saveRobotList(List<RobotUser> robotList) {
		UserDao dao = new UserDao(context);
		dao.saveRobotUser(robotList);
		return true;
	}

	public void setSettingMsgNotification(boolean paramBoolean) {
		PreferenceManager.getInstance().setSettingMsgNotification(paramBoolean);
		valueCache.put(Key.VibrateAndPlayToneOn, paramBoolean);
	}

	public boolean getSettingMsgNotification() {
		Object val = valueCache.get(Key.VibrateAndPlayToneOn);

		if (val == null) {
			val = PreferenceManager.getInstance().getSettingMsgNotification();
			valueCache.put(Key.VibrateAndPlayToneOn, val);
		}

		return (Boolean) (val != null ? val : true);
	}

	public void setSettingMsgSound(boolean paramBoolean) {
		PreferenceManager.getInstance().setSettingMsgSound(paramBoolean);
		valueCache.put(Key.PlayToneOn, paramBoolean);
	}

	public boolean getSettingMsgSound() {
		Object val = valueCache.get(Key.PlayToneOn);

		if (val == null) {
			val = PreferenceManager.getInstance().getSettingMsgSound();
			valueCache.put(Key.PlayToneOn, val);
		}

		return (Boolean) (val != null ? val : true);
	}

	public void setSettingMsgVibrate(boolean paramBoolean) {
		PreferenceManager.getInstance().setSettingMsgVibrate(paramBoolean);
		valueCache.put(Key.VibrateOn, paramBoolean);
	}

	public boolean getSettingMsgVibrate() {
		Object val = valueCache.get(Key.VibrateOn);

		if (val == null) {
			val = PreferenceManager.getInstance().getSettingMsgVibrate();
			valueCache.put(Key.VibrateOn, val);
		}

		return (Boolean) (val != null ? val : true);
	}

	public void setSettingMsgSpeaker(boolean paramBoolean) {
		PreferenceManager.getInstance().setSettingMsgSpeaker(paramBoolean);
		valueCache.put(Key.SpakerOn, paramBoolean);
	}

	public boolean getSettingMsgSpeaker() {
		Object val = valueCache.get(Key.SpakerOn);

		if (val == null) {
			val = PreferenceManager.getInstance().getSettingMsgSpeaker();
			valueCache.put(Key.SpakerOn, val);
		}

		return (Boolean) (val != null ? val : true);
	}

	public void setDisabledGroups(List<String> groups) {
		if (dao == null) {
			dao = new UserDao(context);
		}

		dao.setDisabledGroups(groups);
		valueCache.put(Key.DisabledGroups, groups);
	}

	public List<String> getDisabledGroups() {
		Object val = valueCache.get(Key.DisabledGroups);

		if (dao == null) {
			dao = new UserDao(context);
		}

		if (val == null) {
			val = dao.getDisabledGroups();
			valueCache.put(Key.DisabledGroups, val);
		}

		return (List<String>) val;
	}

	public void setDisabledIds(List<String> ids) {
		if (dao == null) {
			dao = new UserDao(context);
		}

		dao.setDisabledIds(ids);
		valueCache.put(Key.DisabledIds, ids);
	}

	public List<String> getDisabledIds() {
		Object val = valueCache.get(Key.DisabledIds);

		if (dao == null) {
			dao = new UserDao(context);
		}

		if (val == null) {
			val = dao.getDisabledIds();
			valueCache.put(Key.DisabledIds, val);
		}

		return (List<String>) val;
	}

	public void setGroupsSynced(boolean synced) {
		PreferenceManager.getInstance().setGroupsSynced(synced);
	}

	public boolean isGroupsSynced() {
		return PreferenceManager.getInstance().isGroupsSynced();
	}

	public void setContactSynced(boolean synced) {
		PreferenceManager.getInstance().setContactSynced(synced);
	}

	public boolean isContactSynced() {
		return PreferenceManager.getInstance().isContactSynced();
	}

	public void setBlacklistSynced(boolean synced) {
		PreferenceManager.getInstance().setBlacklistSynced(synced);
	}

	public boolean isBacklistSynced() {
		return PreferenceManager.getInstance().isBacklistSynced();
	}

	public void allowChatroomOwnerLeave(boolean value) {
		PreferenceManager.getInstance()
				.setSettingAllowChatroomOwnerLeave(value);
	}

	public boolean isChatroomOwnerLeaveAllowed() {
		return PreferenceManager.getInstance()
				.getSettingAllowChatroomOwnerLeave();
	}

	public void setDeleteMessagesAsExitGroup(boolean value) {
		PreferenceManager.getInstance().setDeleteMessagesAsExitGroup(value);
	}

	public boolean isDeleteMessagesAsExitGroup() {
		return PreferenceManager.getInstance().isDeleteMessagesAsExitGroup();
	}

	public void setAutoAcceptGroupInvitation(boolean value) {
		PreferenceManager.getInstance().setAutoAcceptGroupInvitation(value);
	}

	public boolean isAutoAcceptGroupInvitation() {
		return PreferenceManager.getInstance().isAutoAcceptGroupInvitation();
	}

	enum Key {
		VibrateAndPlayToneOn, VibrateOn, PlayToneOn, SpakerOn, DisabledGroups, DisabledIds
	}
}
